#
# @lc app=leetcode.cn id=11 lang=python3
#
# [11] 盛最多水的容器
#
"""
本题使用双指针来解决问题

当计算数组内任意两条线与x轴形成的面积时，需要通过 right-left 来表示长方形的底
而长方形的高根据题意应该为 min(height[left], height[right])，由此可计算出该长方形的面积

为什么一层循环就可以实现，不会遗漏最优解吗？

可以将左右指针遍历的区域视为两个区域，左右指针之间比较大小来进行移动，在左右指针相遇之前会分别找到左右区域中较大的值
而结果更新的语句在判断语句之外，意为着每次循环都会比较并保留最大面积
要使面积最大需要使底或高尽可能的大，左右指针遍历时可以找到较大的高，而每次循环的结果保存可以保证最大面积（底较大且高较大）
"""


# @lc code=start
class Solution:
    def maxArea(self, height: List[int]) -> int:
        left, right = 0, len(height) -1
        res = 0

        while left < right:
            s = (right - left) * min(height[left], height[right])
            res = max(s, res)

            if height[left] < height[right]:
                left += 1
            else:
                right -= 1
        
        return res
# @lc code=end

